#ifndef _RENDER_DEVICE_H_
#define _RENDER_DEVICE_H_

#include "PCH.h"
#include "StateDefines.h"
#include "RasterizerState.h"
#include "Texture2D.h"
#include "DeShaderReflection.h"
#include "DeRenderResource.h"
#include "D3D11RenderDevice.h"

namespace DeviousRenderer
{

	enum ETextureCreateFlag
	{

	};

	enum EPixelFormat
	{
		PF_R32G32B32A32_FLOAT,
		PF_R8G8B8A8_UNORM,
		PF_NUM
	};

	enum EResourceBindFlag
	{
		RBF_VERTEX_BUFFER		= 1 << 0,
		RBF_INDEX_BUFFER		= 1 << 1,
		RBF_CONSTANT_BUFFER		= 1 << 2,
		RBF_SHADER_RESOURCE		= 1 << 3,
		RBF_STREAM_OUTPUT		= 1 << 4,
		PBF_RENDER_TRAGET		= 1 << 5,
		PBF_DEPTH_STENCIL		= 1 << 6,
		PBF_UNORERED_ACCESS		= 1 << 7

	};



class DeShader;

class DeRenderDevice
{
public:
	DeRenderDevice();
	virtual ~DeRenderDevice();

	//static DeRasterizerStatePtr CreateRasterizerState(DeRasterizerDescription* desc);
	virtual DeTexture2DPtr			CreateTexture2D(int sizeX, int sizeY, EPixelFormat format, uint numMips, dword flags) = 0;
 	virtual DeRenderTargetViewPtr	CreateRenderTargetView(const DeTexture2DPtr& texture2D) = 0;
// 	DeDepthStencilView*			CreateDepthStencilView(const Texture2D* texture2D);
// 	int							GetResolutionX(){ return 800; }
// 	int							GetResolutionY(){ return 600; }
// 
// 	DeShaderReflection*			GenerateReflection(const DeShader* pShader, std::map<std::string, DeShaderParameter*>& parametersMap);




	

protected:
	static DeRenderDevice*		m_spRenderDevice;


	ID3D11Device*			m_pDevice;
	//GBuffers

};


}

#endif //_RENDER_DEVICE_H_